স্প্রিং সিকিউরিটির @PreAuthorize, @PostAuthorize, এবং @Secured অ্যানোটেশনগুলি মেথড লেভেল সিকিউরিটি প্রয়োগ করতে ব্যবহৃত হয়। এগুলি আপনাকে স্প্রিং অ্যাপ্লিকেশনগুলিতে সিকিউরিটি নিয়মগুলো সরাসরি মেথডের উপর প্রয়োগ করার সুবিধা দেয়, যা কোডে রোল-ভিত্তিক অথরাইজেশন বা এক্সপ্রেশন-ভিত্তিক অথরাইজেশন নির্ধারণ করতে সাহায্য করে।
১. @PreAuthorize অ্যানোটেশন
@PreAuthorize অ্যানোটেশনটি একটি মেথড এক্সিকিউট হওয়ার আগে নির্দিষ্ট শর্ত পূর্ণ হলে এক্সিকিউশন অনুমোদন দেয়। এটি স্প্রিং এলএক্সপ্রেশন ল্যাঙ্গুয়েজ (SpEL) ব্যবহার করে শর্ত নির্ধারণ করতে পারে।
ব্যবহার:
@PreAuthorizeঅ্যানোটেশন ব্যবহার করে আপনি মেথডের এক্সিকিউশন আগে নিশ্চিত করতে পারেন যে নির্দিষ্ট শর্ত বা অনুমতি রয়েছে।- সাধারণত স্প্রিং সিকিউরিটি কনফিগারেশনের মাধ্যমে অ্যাক্সেস কন্ট্রোল ইমপ্লিমেন্ট করা হয়।
উদাহরণ:
@PreAuthorize("hasRole('ADMIN')")
public void deleteUser(Long userId) {
// মেথড যা শুধুমাত্র ADMIN রোল থাকা ইউজারের জন্য এক্সিকিউট হবে
userRepository.deleteById(userId);
}
এখানে, deleteUser মেথডটি শুধুমাত্র সেই ব্যবহারকারীদের জন্য এক্সিকিউট হবে যাদের রোল "ADMIN"।
@PreAuthorize অ্যানোটেশনে স্পেল এক্সপ্রেশন ব্যবহার করা যায় যেমন:
hasRole('ROLE_USER')- ইউজার যদি 'USER' রোল না থাকে, মেথডটি এক্সিকিউট হবে না।@PreAuthorize("hasPermission(#user, 'DELETE')")- নির্দিষ্ট শর্তে ফাংশনটি এক্সিকিউট হবে।
২. @PostAuthorize অ্যানোটেশন
@PostAuthorize অ্যানোটেশনটি মেথড এক্সিকিউট হওয়ার পর শর্ত যাচাই করার জন্য ব্যবহৃত হয়। এর মাধ্যমে আপনি মেথডের রিটার্ন ভ্যালু এক্সিকিউট হওয়ার পর পরীক্ষা করতে পারেন যে সেই রিটার্ন ভ্যালুর উপর ভিত্তি করে অনুমতি আছে কিনা।
ব্যবহার:
@PostAuthorizeঅ্যানোটেশনটি রিটার্ন ভ্যালুর উপর ভিত্তি করে অথরাইজেশন নির্ধারণ করে।- এটি সাধারণত এমন ক্ষেত্রে ব্যবহৃত হয় যেখানে মেথডটি কিছু প্রক্রিয়া সম্পাদন করার পর রিটার্ন ডেটার উপর ভিত্তি করে শর্ত নির্ধারণ করা হয়।
উদাহরণ:
@PostAuthorize("returnObject.username == authentication.name")
public User getUser(Long userId) {
return userRepository.findById(userId).orElse(null);
}
এখানে, getUser মেথডটি শুধুমাত্র সেই ক্ষেত্রে রিটার্ন হবে যখন ইউজারের username বর্তমান ইউজারের সাথে মেলে (authentication.name)।
৩. @Secured অ্যানোটেশন
@Secured অ্যানোটেশনটি মেথডের উপর সরাসরি রোল বা অথরিটি ভিত্তিক অ্যাক্সেস কন্ট্রোল প্রয়োগ করতে ব্যবহৃত হয়। এটি একটি সহজ পদ্ধতি যা শুধুমাত্র নির্দিষ্ট রোল বা অনুমতিসমূহকে মেথডের জন্য অনুমোদন দেয়। তবে এটি স্প্রিং এলএক্সপ্রেশন ল্যাঙ্গুয়েজ (SpEL) সমর্থন করে না, যেমন @PreAuthorize বা @PostAuthorize।
ব্যবহার:
@Securedঅ্যানোটেশনটি একাধিক রোলের সাথে ব্যবহৃত হতে পারে।
উদাহরণ:
@Secured("ROLE_ADMIN")
public void createUser(User user) {
// এই মেথডটি শুধুমাত্র "ROLE_ADMIN" রোল থাকা ইউজারের জন্য এক্সিকিউট হবে
userRepository.save(user);
}
এখানে, createUser মেথডটি শুধুমাত্র সেই ব্যবহারকারীদের জন্য এক্সিকিউট হবে যাদের রোল "ROLE_ADMIN"।
তুলনা:
| অ্যানোটেশন | কাজের প্রক্রিয়া | সুবিধা | উদাহরণ |
|---|---|---|---|
@PreAuthorize | মেথড এক্সিকিউট হওয়ার আগে শর্ত যাচাই | স্পেল এক্সপ্রেশন ব্যবহার করা যায় | @PreAuthorize("hasRole('ADMIN')") |
@PostAuthorize | মেথড এক্সিকিউট হওয়ার পরে শর্ত যাচাই | রিটার্ন ভ্যালুর উপর ভিত্তি করে অনুমতি যাচাই | @PostAuthorize("returnObject.username == authentication.name") |
@Secured | নির্দিষ্ট রোল ভিত্তিক অথরাইজেশন | সহজ রোল ভিত্তিক অথরাইজেশন | @Secured("ROLE_ADMIN") |
উপসংহার:
@PreAuthorizeএবং@PostAuthorizeঅ্যানোটেশনগুলির মাধ্যমে আপনি স্প্রিং সিকিউরিটিতে খুবই শক্তিশালী অথরাইজেশন পলিসি তৈরি করতে পারেন, যেহেতু এই দুটি স্পেল এক্সপ্রেশন সমর্থন করে, যা আরও নমনীয় কনফিগারেশন দেয়।@Securedএকটি সরল পদ্ধতি, যেখানে আপনি সহজে রোল-ভিত্তিক এক্সেস কন্ট্রোল করতে পারেন।
এই অ্যানোটেশনগুলি ব্যবহার করে আপনি স্প্রিং অ্যাপ্লিকেশনে মেথড লেভেল অথরাইজেশন এবং সিকিউরিটি প্রয়োগ করতে পারবেন।